#include <stdio.h>

#define OK  1
#define ERROR   0
#define TRUE    1
#define FALSE   0
typedef int Status;

#define MAXSIZE 20//数据长度
typedef int ElemType;//定义全局使用的数据类型
typedef struct//顺序表：数组 + 数组元素个数
{
    ElemType data[MAXSIZE];
    int length;
}SqList;


Status GetElem (SqList L,int i,ElemType *e)
{
    if ( L.length == 0 || i < 1 || i > L.length )
        return ERROR;
    *e = L.data[i-1];
    return OK;
}


Status ListInsert (SqList *L, int i, ElemType e)//插入
{
    int k;








#if 0
    if ( L->length == MAXSIZE )
        return ERROR;
    if ( i < 1 || i > L->length + 1 )
        return ERROR;
        这是书上写的代码，下面我把条件语句整合了一下
#endif







        
    if ( L->length == MAXSIZE || i < 1 || i > L->length + 1 )//数据满了，i小于1 ，i的位置不在当前存在的数据的后面的第一个位置的时候返回 ERROR.
        return ERROR;
    if ( i <= L->length )
    {
        for ( k = L->length - 1 ; k >= i - 1; k-- )
            L->data[k+1] = L->data[k];
    }
    L->data[i-1] = e;
    L->length++;
    return OK;
}


Status ListDelete (SqList *L, int i, ElemType *e)//删除
{
    int k;
    
    if ( L->length == 0 || i < 0 || i > L->length )
        return ERROR;
    
    *e = L->data[i-1];





#if 0
    if ( i < L->length )
    {
        for ( k = i; k < L->length ; k++ )
        {
            L->data[k-1] = L->data[k];
        }
    }
    *书上的写法
#endif





    if ( i < L->length )
    {
        for ( k = i-1; k < L->length ; k++ )
        {
            L->data[k] = L->data[k+1];
        }
    }

    L->length--;

    return OK;
}
